#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/wait.h>
int main(){
    pid_t id=fork();
    if(id<0){
        //创建失败
        perror("fork");
        return 1;
    }
    else if(id==0){
        //子进程(task)
        //while(1){     
        // printf("I am child,pid:%d,ppid:%d\n",getpid(),getppid());
        //  sleep(1);
        // }
        sleep(5);
        exit(99);
    }
    else{
        int statu;
        pid_t ret;
        //wait(&statu);
        //pid_t ret= waitpid(-1,&statu,0);
        while((ret=waitpid(-1,&statu,WNOHANG))==0){
            printf("有子进程，但是目前还没有退出!\n");
            sleep(1);
        }
        //if(ret<0){
        //    perror("waitpid error");
        //}
        //else if(ret==0){
        //   printf("有子进程，但是目前还没有退出!\n");
        //}
        //else{
        //  printf("退出子进程的pid:%d-%d\n",ret,id);
        //}
        //wait(NULL);
        //父进程
        //while(1){
        //printf("I am parent,pid:%d,ppid:%d\n",getpid(),getppid());
        //sleep(1);
        //}
        if(WIFEXITED(statu)!=0){
        printf("退出子进程的pid:%d-%d\n",ret,id);
        //printf("statu:%d\n",statu);
        printf("statu:%d\n",WEXITSTATUS(statu));
        }
        return 0;
    }
    //printf("I am parent process!%d\n",getpid());
    //pid_t ret=fork();//变成两个进程，一个是父进程，一个是子进程
    //printf("ret:%d,pid:%d,ppid:%d\n",ret,getpid(),getppid());
    //while(1){
    //    pid_t id=getpid();//获取的是自己的进程PID
    //    printf("hello world!，pid:%d,ppid:%d\n",id,getppid());
    //    sleep(1);
    // }
}
